<?php
/**
 * Created by PhpStorm.
 * User: 王文凡<787802868@qq.com>
 * Date: 2016/5/5 0005
 * Time: 09:44
 */
/*打印函数*/
function p($arr){
    echo '<pre>';
    print_r($arr);
    echo '</pre>';
}

//分页
function page($count,$pageS,$size){
    $page = new \Think\Page($count,$pageS);
    $page->setConfig('theme', '%FIRST%%UP_PAGE%%LINK_PAGE%%DOWN_PAGE%%END%%HEADER%');
    $page->lastSuffix = false;//最后一页不显示为总页数
    $page->rollPage = $size;
    return $page;
}

function api_port($url){
    $ch = curl_init();
    $header = array(
        'apikey: f0d9cbbcdeceb216828cf614dd745637',
    );
    // 添加apikey到header
    curl_setopt($ch, CURLOPT_HTTPHEADER  , $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // 执行HTTP请求
    curl_setopt($ch , CURLOPT_URL , $url);
     $res = curl_exec($ch);
    return objectToArray(json_decode($res));
}
//对象转数组
function objectToArray($obj){
    $arr = is_object($obj) ? get_object_vars($obj) : $obj;
    if(is_array($arr)){
        return array_map(__FUNCTION__, $arr);
    }else{
        return $arr;
    }
}

//在线交易订单支付处理函数
//函数功能：根据支付接口传回的数据判断该订单是否已经支付成功；
//返回值：如果订单已经成功支付，返回true，否则返回false；
function checkorderstatus($ordid){
    $Ord=M('Orderlist');
    $ordstatus=$Ord->where('ordid='.$ordid)->getField('ordstatus');
    if($ordstatus==1){
        return true;
    }else{
        return false;
    }
}
//处理订单函数
//更新订单状态，写入订单支付后返回的数据
function orderhandle($parameter){
    $ordid=$parameter['out_trade_no'];
    $data['payment_trade_no']      =$parameter['trade_no'];
    $data['payment_trade_status']  =$parameter['trade_status'];
    $data['payment_notify_id']     =$parameter['notify_id'];
    $data['payment_notify_time']   =$parameter['notify_time'];
    $data['payment_buyer_email']   =$parameter['buyer_email'];
    $data['ordstatus']             =1;
    $Ord=M('Orderlist');
    $Ord->where('ordid='.$ordid)->save($data);
}

//获取一个随机且唯一的订单号；
function getcodes(){
    $Ord=M('Orders');
    $numbers = range (10,99);
    shuffle ($numbers);
    $code=array_slice($numbers,0,4);
    $ordcode=$code[0].$code[1].$code[2].$code[3];
    $oldcode=$Ord->where("order_number='".$ordcode."'")->getField('order_number');
    if($oldcode){
        getordcode();
    }else{
        return $ordcode;
    }
}

//自定义订单号
function getordcode(){
    $Ord=M('Orders');
    $year=intval(Date('Y'));//当前年份
    $month=intval(Date('m'));//当前月份
    $one=2678400;//一月的时间戳
    $dqMonth=strtotime(date('Y-m '));//当前月份时间戳
    $nextMonth=$dqMonth+$one;//下月时间
    $condition['order_time'] = array(between,array($dqMonth,$nextMonth));
    $condition['status']=array('gt',0);
    $numberStr=M('Orders')->field("rid,order_price")->where($condition)->count();
    $numberStr+=1;
    if(strlen($numberStr)==1){
        $numberStr='00'.$numberStr;
    }elseif(strlen($numberStr)==2){
        $numberStr='0'.$numberStr;
    }
    if($month==1){
        $month='0'.$month;
    }
    $orderStr=$year.$month.$numberStr;
    
    $oldcode=$Ord->where("order_number='".$orderStr."'")->getField('order_number');
   
    if($oldcode){
        getordcode();
    }else{
        return $orderStr;
    }
}



//订单号函数
function getOrderNumber(){
    return  date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
}

function generate_username( $length = 6 ) {
    // 密码字符集，可任意添加你需要的字符
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $password = '';
    for ( $i = 0; $i < $length; $i++ )
    {
        // 这里提供两种字符获取方式
        // 第一种是使用substr 截取$chars中的任意一位字符；
        // 第二种是取字符数组$chars 的任意元素
        // $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        $password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
    }
    return $password;
}




//发送邮件函数
function sendEmail($arr){
    require_once "email/email.class.php";
//******************** 配置信息 ********************************
    $smtpserver = "smtp.163.com";//SMTP服务器

    $smtpserverport =25;//SMTP服务器端口

    $smtpusermail = "18683938831@163.com";//SMTP服务器的用户邮箱

    $smtpemailto = $arr['toemail'];//发送给谁

    $smtpuser = "18683938831";//SMTP服务器的用户帐号

    $smtppass = "wwf910505";//SMTP服务器的用户密码

    $mailtitle = '--------------------';//邮件主题

    $mailcontent = $arr['content'];//邮件内容

    $mailtype = "HTML";//邮件格式（HTML/TXT）,TXT为文本邮件
//************************ 配置信息 ****************************
    $smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
    $smtp->debug = false;//是否显示发送的调试信息
    $state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype);
    if($state==''){
        return false;
    }else{
        return true;
    }
}

/**
 * 系统加密方法
 * @param string $data 要加密的字符串
 * @param string $key  加密密钥
 * @param int $expire  过期时间 单位 秒
 * return string
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function think_encrypt($data, $key = '', $expire = 0) {
    $key  = md5(empty($key) ? C('DATA_AUTH_KEY') : $key);
    $data = base64_encode($data);
    $x    = 0;
    $len  = strlen($data);
    $l    = strlen($key);
    $char = '';
    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) $x = 0;
        $char .= substr($key, $x, 1);
        $x++;
    }
    $str = sprintf('%010d', $expire ? $expire + time():0);
    for ($i = 0; $i < $len; $i++) {
        $str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1)))%256);
    }
    return str_replace(array('+','/','='),array('-','_',''),base64_encode($str));
}


/**
 * 系统解密方法
 * @param  string $data 要解密的字符串 （必须是think_encrypt方法加密的字符串）
 * @param  string $key  加密密钥
 * return string
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function think_decrypt($data, $key = ''){
    $key    = md5(empty($key) ? C('DATA_AUTH_KEY') : $key);
    $data   = str_replace(array('-','_'),array('+','/'),$data);
    $mod4   = strlen($data) % 4;
    if ($mod4) {
        $data .= substr('====', $mod4);
    }
    $data   = base64_decode($data);
    $expire = substr($data,0,10);
    $data   = substr($data,10);
    if($expire > 0 && $expire < time()) {
        return '';
    }
    $x      = 0;
    $len    = strlen($data);
    $l      = strlen($key);
    $char   = $str = '';
    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) $x = 0;
        $char .= substr($key, $x, 1);
        $x++;
    }
    for ($i = 0; $i < $len; $i++) {
        if (ord(substr($data, $i, 1))<ord(substr($char, $i, 1))) {
            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
        }else{
            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
        }
    }
    return base64_decode($str);
}


function node_marge($node,$access=null,$pid=0){
    //后台数据信息管理 管理RBAC  应用
    $arr=array();
    foreach($node as $v){
        if(is_array($access)){
            $v['access']=in_array($v['id'],$access) ? 1:0;
        }
        if($v['srpid']==$pid){
            $v['child']=node_marge($node,$access,$v['id']);
            $arr[]=$v;
        }
    }
    return $arr;

}


//组合权限表
function node_margegroup($node,$rbacid=2){
    //后台数据信息管理 管理RBAC  应用
    $arr=array();
    foreach($node as $v){
        if($v['rbacpid']==$rbacid){
            $v['child']=node_margegroup($node,$v['rbacid']);
            $arr[]=$v;
        }
    }
    return $arr;
}



/**
 *无限极递归分类
 */
function oneL($cate,$pid=0,$deli='---',$level=0){
    $arr = array();
    foreach($cate as $v){
        if($v['pid'] == $pid){
            $v['level'] = $level +1 ;
            $v['deli'] = str_repeat($deli,$level);
            $arr[] = $v;

            $arr = array_merge($arr,oneL($cate,$v['id'],$deli,$v['level']));
        }
    }
    return $arr;
}

//拼装多维数组
function manyL($cate,$pid=0){
    $arr = array();
    foreach($cate as $v){
        if($v['pid'] == $pid){
            $v['child'] = manyL($cate,$v['id']);

            $arr[] = $v;
        }
    }
    return $arr;
}
//拼装订单数组
function putarry($arr,$pname){
    $data=array();
    foreach ($arr as $key => $value) {
        if($key ==$pname){
            foreach ($value as $k => $v) {
                $data[][$key]=$v;
            }
        }else{
            foreach ($value as $k => $v) {
                $data[$k][$key]=$v;
            }
        }
    }
    return $data;

}
